# Hospedando bots e websites no heroku

## O que é o heroku?

Heroku é uma plataforma de hospedagem de serviços online que suporta diversas
linguagens de programação e tem suporte a addons(ferramentas extras), isso
possibilita o uso de ferramentas de conversão como o ffmpeg e diversos outros
programas, o serviço conta com um plano gratuito que tem 600 horas de uso
mensais, isso deixa um serviço online por 25 dias sem desligar em nenhum
momento a menos que ele use mais memoria RAM que o disponivel para ele, é uma
ótima plataforma para deixar seus bots ou websites online, e falando em sites,
hoje vamos hospedar um Hello World em flask nele!


## Criando uma conta

Para criar sua conta navegue ate o site do [Heroku](http://heroku.com) e clique em
Sign Up no canto superior direito, em seguida preencha os campos com suas informações
(não é preciso cartão de crédito) e depois confirme seu email, com a conta criada,
pronto, a conta foi ativada e já pode ser usada.


## Criando um Hello World com flask

Crie um arquivo `hello.py` em uma pasta do projeto e coloque o seguinte conteúdo:

```python
from flask import Flask
from os import environ

app = Flask(__name__)

@app.route("/")
def index():
    return "<h1>Hello World!</h1>"

app.run(
    host='0.0.0.0',
    port=int(environ.get("PORT", 5000))
)
```

Usar a variável de ambiente `PORT` é importante para que o site funcione no
dominio que o heroku disponibiliza, as portas de conexão são aleatórias e por
isso é preciso a variável de ambiente, agora precisamos criar um arquivo `requirements.txt`
para que o heroku indentifique que é um projeto em python e saiba quais são as
bibliotecas usadas nele, crie uma linha com o texto `flask` nela para que o
heroku instale ele antes de iniciar a execução do projeto, bom, agora falta
uma coisa, como o heroku vai saber como iniciar o projeto? Com o `Procfile` um
arquivo sem extensão que diz o tipo de projeto e como faze-lo funcionar, temos dois
tipos principais, o web que é para websites e o worker que é para
qualquer projeto que não precise de uma porta de conexão exposta, aqui vamos
usar o web, coloque o seguinte conteúdo no arquivo `Procfile`:

```text
web: python hello.py
```

Agora temos o projeto completo.


## Instalando a ferramenta de linha de comando do heroku

Obs: Você não precisa instalar essa ferramenta se vai usar um repositório do 
github.


A instalação da ferramenta de linha de comandos do heroku é feita de duas
formas: Com um tarball ou com o npm/yarn.

A instalação usando o npm/yarn é bem simples e você só precisa do
[Node.Js](https://nodejs.org) com o npm ou yarn para fazer a instalação, para
instalar execute o seguinte comando:

```bash
npm install -g heroku
# ou
yarn global add heroku
```

e pronto! A instalação com o tarball também é simples mas precisa colocar o
diretorio bin dele na variável de ambiente PATH, use os seguintes comandos para
fazer a instalação:

```bash
cd $HOME
wget https://cli-assets.heroku.com/heroku-linux-x64.tar.gz -O heroku.tgz
tar -xzf heroku.tgz

# Adiciona o heroku ao PATH para ser chamado com o comando heroku
export PATH=$HOME/heroku/bin:$PATH

# Para deixar ele no path direto é só executar este comando
# Obs: Este comando é para usuários do bash
echo 'export PATH=$HOME/heroku/bin:$PATH' >> $HOME/.bashrc
```

Pronto, agora é só fazer o login na sua conta, execute:

```bash
heroku login
```

E pressionar enter, ele vai abrir uma aba no navegador padrão do sistema e
agora você só precisa clicar em Ok


## Criando o app e deixando online

Entre no site do heroku e clique no botão "Create new app", de um nome ao app e clique
em "Create app", agora você vai cair na página do app, vá ate "Deploy" e
dêssa ate "Deploy using Heroku Git", volte ao terminal e vá ate a pasta do projeto
nela digite os seguintes comandos:

```bash
# Inicializa o repositório git
git init .
# Adiciona o app do heroku no projeto
heroku git:remote -a <nome do app>
# Adiciona todos os arquivos ao projeto
git add -A
# Cria  primeiro commit
git commit -m 'Projeto Iniciado'
# Envia o conteúdo da branch main para o repositório remoto do heroku
git push heroku main
```

Espere um pouco e volte ate o site do heroku na sessão do app, clique em "Resources"
e ao lado de do botão on/off tem um botão de editar, clique nele e em seguida 
no botão on/off para ativar, pronto, seu app esta online, acesse `<nome do
app>.herokuapp.com` para vê-lo funcionando.

É isso, flw!
